package com.xie.leetcode.math;

//423. 从英文中重建数字
//        给你一个字符串 s ，其中包含字母顺序打乱的用英文单词表示的若干数字（0-9）。按 升序 返回原始的数字。
//
//
//
//        示例 1：
//
//        输入：s = "owoztneoer"
//        输出："012"
//        示例 2：
//
//        输入：s = "fviefuro"
//        输出："45"
//
//
//        提示：
//
//        1 <= s.length <= 105
//        s[i] 为 ["e","g","f","i","h","o","n","s","r","u","t","w","v","x","z"] 这些字符之一
//        s 保证是一个符合题目要求的字符串

import java.util.HashMap;
import java.util.Map;

/**
 * @author xiezhendong
 * @date 2021/11/24
 */
public class OriginalDigits {

    public static void main(String[] args) {
        OriginalDigits originalDigits = new OriginalDigits();
        System.out.println(originalDigits.originalDigits("owoztneoer"));
        System.out.println(originalDigits.originalDigits("fviefuro"));
        System.out.println(originalDigits.originalDigits("zerozero"));
    }

    String[] nums = new String[]{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

    public String originalDigits(String s) {
        Map<String, Integer> sCharMap = new HashMap<>();
        for (char c : s.toCharArray()) {
            String sChar = String.valueOf(c);
            if (sCharMap.get(sChar) != null) {
                sCharMap.put(sChar, sCharMap.get(sChar) + 1);
            } else {
                sCharMap.put(sChar, +1);
            }
        }
        Map<Integer, Integer> valueMap = new HashMap<>();
        // 0
        if (sCharMap.get("z") != null && sCharMap.get("z") > 0) {
            int zNum = sCharMap.get("z");
            valueMap.put(0, zNum);
            sCharMap.put("z", sCharMap.get("z") - zNum);
            sCharMap.put("e", sCharMap.get("e") - zNum);
            sCharMap.put("r", sCharMap.get("r") - zNum);
            sCharMap.put("o", sCharMap.get("o") - zNum);
        }
        // 2
        if (sCharMap.get("w") != null && sCharMap.get("w") > 0) {
            int wNum = sCharMap.get("w");
            valueMap.put(2, wNum);
            sCharMap.put("t", sCharMap.get("t") - wNum);
            sCharMap.put("w", sCharMap.get("w") - wNum);
            sCharMap.put("o", sCharMap.get("o") - wNum);
        }
        // 4
        if (sCharMap.get("u") != null && sCharMap.get("u") > 0) {
            int uNum = sCharMap.get("u");
            valueMap.put(4, uNum);
            sCharMap.put("f", sCharMap.get("f") - uNum);
            sCharMap.put("o", sCharMap.get("o") - uNum);
            sCharMap.put("u", sCharMap.get("u") - uNum);
            sCharMap.put("r", sCharMap.get("r") - uNum);
        }
        // 6
        if (sCharMap.get("x") != null && sCharMap.get("x") > 0) {
            int xNum = sCharMap.get("x");
            valueMap.put(6, xNum);
            sCharMap.put("s", sCharMap.get("s") - xNum);
            sCharMap.put("i", sCharMap.get("i") - xNum);
            sCharMap.put("x", sCharMap.get("x") - xNum);
        }
        // 8
        if (sCharMap.get("g") != null && sCharMap.get("g") > 0) {
            int gNum = sCharMap.get("g");
            valueMap.put(8, gNum);
            sCharMap.put("e", sCharMap.get("e") - gNum);
            sCharMap.put("i", sCharMap.get("i") - gNum);
            sCharMap.put("g", sCharMap.get("g") - gNum);
            sCharMap.put("h", sCharMap.get("h") - gNum);
            sCharMap.put("t", sCharMap.get("t") - gNum);
        }
        // 1
        if (sCharMap.get("o") != null && sCharMap.get("o") > 0) {
            int oNum = sCharMap.get("o");
            valueMap.put(1, oNum);
            sCharMap.put("o", sCharMap.get("o") - oNum);
            sCharMap.put("n", sCharMap.get("n") - oNum);
            sCharMap.put("e", sCharMap.get("e") - oNum);
        }
        // 3
        if (sCharMap.get("h") != null && sCharMap.get("h") > 0) {
            int hNum = sCharMap.get("h");
            valueMap.put(3, hNum);
            sCharMap.put("t", sCharMap.get("t") - hNum);
            sCharMap.put("h", sCharMap.get("h") - hNum);
            sCharMap.put("r", sCharMap.get("r") - hNum);
            sCharMap.put("e", sCharMap.get("e") - hNum);
            sCharMap.put("e", sCharMap.get("e") - hNum);
        }
        // 5
        if (sCharMap.get("f") != null && sCharMap.get("f") > 0) {
            int fNum = sCharMap.get("f");
            valueMap.put(5, fNum);
            sCharMap.put("f", sCharMap.get("f") - fNum);
            sCharMap.put("i", sCharMap.get("i") - fNum);
            sCharMap.put("v", sCharMap.get("v") - fNum);
            sCharMap.put("e", sCharMap.get("e") - fNum);
        }
        // 7
        if (sCharMap.get("s") != null && sCharMap.get("s") > 0) {
            int sNum = sCharMap.get("s");
            valueMap.put(7, sNum);
            sCharMap.put("s", sCharMap.get("s") - sNum);
            sCharMap.put("e", sCharMap.get("e") - sNum);
            sCharMap.put("v", sCharMap.get("v") - sNum);
            sCharMap.put("e", sCharMap.get("e") - sNum);
            sCharMap.put("n", sCharMap.get("n") - sNum);
        }
        // 9
        if (sCharMap.get("i") != null && sCharMap.get("i") > 0) {
            int iNum = sCharMap.get("i");
            valueMap.put(9, iNum);
        }

        StringBuilder value = new StringBuilder();
        for (int i = 0; i < 10; i++) {
            Integer num = valueMap.get(i);
            if (num != null) {
                for (int integer = 0; integer < num; integer++) {
                    value.append(i);
                }
            }
        }
        return value.toString();
    }
}
